package org.byd.dmsja.utils;

import java.util.List;

public class Method {
    public interface IFunc0<R> {
        R apply();
    }

    public static interface IFunc1<T1, R> {
        R apply(T1 t1);
    }

    public static interface IFunc2<T1, T2, R> {
        R apply(T1 t1, T2 t2);
    }

    public static interface IFunc3<T1, T2, T3, R> {
        R apply(T1 t1, T2 t2, T3 t3);
    }

    public static interface IFunc4<T1, T2, T3, T4, R> {
        R apply(T1 t1, T2 t2, T3 t3, T4 t4);
    }

    public static interface IFunc5<T1, T2, T3, T4, T5, R> {
        R apply(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5);
    }

    public interface IAction0 {
        void accept();
    }

    public interface IAction1<T1> {
        void accept(T1 t1);
    }

    public interface IAction2<T1, T2> {
        void accept(T1 t1, T2 t2);
    }

    public interface IAction3<T1, T2, T3> {
        void accept(T1 t1, T2 t2, T3 t3);
    }

    public interface IAction4<T1, T2, T3, T4> {
        void accept(T1 t1, T2 t2, T3 t3, T4 t4);
    }

    public interface IAction5<T1, T2, T3, T4, T5> {
        void accept(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5);
    }

    public interface ISumFunc {
        Integer apply(List<Integer> l1);
    }

    public interface IPredicate0 {
        Boolean apply();
    }

    public interface IPredicate1<T1> {
        Boolean apply(T1 t1);
    }

    public interface IPredicate2<T1, T2> {
        Boolean apply(T1 t1, T2 t2);
    }

    public interface IPredicate3<T1, T2, T3> {
        Boolean apply(T1 t1, T2 t2, T3 t3);
    }

    public interface IPredicate4<T1, T2, T3, T4> {
        Boolean apply(T1 t1, T2 t2, T3 t3, T4 t4);
    }

    public interface IPredicate5<T1, T2, T3, T4, T5> {
        Boolean apply(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5);
    }


}
